Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Blog & UI #97

Merged
merged 46 commits into from
Mar 24, 2025
Merged

Blog & UI #97

merged 46 commits into from
Mar 24, 2025

Conversation

nirnejak
Copy link
Collaborator

@nirnejak nirnejak commented Feb 27, 2025

Summary by CodeRabbit

  • New Features

    • Enhanced page metadata with cover images for improved visual presentation on key pages.
    • Introduced new blog entries with detailed properties for better content organization.
  • Style

    • Updated heading and text styles for better visual emphasis and consistency.
    • Refined markdown formatting, including adjustments to bold styling and spacing.
    • Modified layout classes in components to streamline visual rendering.
    • Added transition effects to buttons for smoother user interactions.
  • Chores

    • Upgraded various dependencies and added a new package for unique identifier generation.

@nirnejak nirnejak added the WIP Work in Progress label Feb 27, 2025
@nirnejak nirnejak self-assigned this Feb 27, 2025
Copy link

vercel bot commented Feb 27, 2025

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
devtoolsacademy ✅ Ready (Inspect) Visit Preview 💬 Add feedback Mar 23, 2025 10:35pm

Copy link
Contributor

coderabbitai bot commented Feb 27, 2025

Walkthrough

This pull request implements several UI and dependency updates. The changes include modifications to heading styling and unique ID generation in MDX components, formatting corrections in an MDX blog page, and minor CSS class adjustments across blog-related components. Additionally, dependency versions in the package manifest have been updated, and a new dependency (uuid) has been added. Several pages have been enhanced by importing cover images and updating their metadata objects to include an image property.

Changes

File(s) Change Summary
mdx-components.tsx, src/components/blog/CommentSection.tsx, src/components/blog/TableOfContents.tsx Updated heading styling: changed CSS classes (e.g., shifting from semi-bold to bold and from bold to extra-bold) in various heading elements; replaced nanoid() with uuidv4() for generating IDs; added tracking-tight in CommentSection and updated font weight in TableOfContents.
src/app/blog/…/page.mdx Removed bold formatting from section headers; corrected contractions in text; increased iframe height from 300 to 500 and updated the iframe’s default tab (from "html,result" to "result").
package.json Updated dependency and devDependency versions (including @clerk/nextjs, @next/mdx, axios, next, @types/node, eslint-config-next, eslint-config-prettier, shiki, and typescript); added new dependency uuid (^11.1.0).
src/components/Hero.tsx, src/components/blog/BlogChatInterface.tsx Removed the size-full CSS utility class from a div and a motion.div, altering layout styling without affecting functionality.
src/app/blog/page.tsx, src/app/contribute/page.tsx, src/app/sponsor/page.tsx, src/app/tools/page.tsx Imported cover image files and updated metadata objects to include a new image property referencing CoverImage.src.

Possibly related PRs

  • Blog Improvements #58: The changes in the main PR regarding updates to CSS class names and ID generation in the mdx-components.tsx file are related to the modifications in the src/app/blog/[slug]/page.tsx file where the ID generation logic is also updated to use uuidv4(), indicating a direct connection at the code level.

Suggested labels

enhancement, performance, frontend, UX, accessibility, ui

Suggested reviewers

  • tyaga001

Warning

There were issues while running some tools. Please review the errors and either fix the tool’s configuration or disable the tool if it’s a critical failure.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

npm warn config production Use --omit=dev instead.
npm warn ERESOLVE overriding peer dependency
npm warn While resolving: @typescript-eslint/[email protected]
npm warn Found: [email protected]
npm warn node_modules/typescript
npm warn dev typescript@"^5.8.2" from the root project
npm warn 2 more (eslint-config-next, ts-api-utils)
npm warn
npm warn Could not resolve dependency:
npm warn peer typescript@">=4.8.4 <5.8.0" from @typescript-eslint/[email protected]
npm warn node_modules/@typescript-eslint/eslint-plugin
npm warn @typescript-eslint/eslint-plugin@"^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0" from [email protected]
npm warn node_modules/eslint-config-next
npm warn
npm warn Conflicting peer dependency: [email protected]
npm warn node_modules/typescript
npm warn peer typescript@">=4.8.4 <5.8.0" from @typescript-eslint/[email protected]
npm warn node_modules/@typescript-eslint/eslint-plugin
npm warn @typescript-eslint/eslint-plugin@"^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0" from [email protected]
npm warn node_modules/eslint-config-next
npm warn ERESOLVE overriding peer dependency
npm warn While resolving: @typescript-eslint/[email protected]
npm warn Found: [email protected]
npm warn node_modules/typescript
npm warn dev typescript@"^5.8.2" from the root project
npm warn 2 more (eslint-config-next, ts-api-utils)
npm warn
npm warn Could not resolve dependency:
npm warn peer typescript@">=4.8.4 <5.8.0" from @typescript-eslint/[email protected]
npm warn node_modules/@typescript-eslint/parser
npm warn peer @typescript-eslint/parser@"^8.0.0 || ^8.0.0-alpha.0" from @typescript-eslint/[email protected]
npm warn node_modules/@typescript-eslint/eslint-plugin
npm warn 1 more (eslint-config-next)
npm warn
npm warn Conflicting peer dependency: [email protected]
npm warn node_modules/typescript
npm warn peer typescript@">=4.8.4 <5.8.0" from @typescript-eslint/[email protected]
npm warn node_modules/@typescript-eslint/parser
npm warn peer @typescript-eslint/parser@"^8.0.0 || ^8.0.0-alpha.0" from @typescript-eslint/[email protected]
npm warn node_modules/@typescript-eslint/eslint-plugin
npm warn 1 more (eslint-config-next)
npm warn ERESOLVE overriding peer dependency
npm warn While resolving: @typescript-eslint/[email protected]
npm warn Found: [email protected]
npm warn node_modules/typescript
npm warn dev typescript@"^5.8.2" from the root project
npm warn 2 more (eslint-config-next, ts-api-utils)
npm warn
npm warn Could not resolve dependency:
npm warn peer typescript@">=4.8.4 <5.8.0" from @typescript-eslint/[email protected]
npm warn node_modules/@typescript-eslint/type-utils
npm warn @typescript-eslint/type-utils@"8.19.1" from @typescript-eslint/[email protected]
npm warn node_modules/@typescript-eslint/eslint-plugin
npm warn
npm warn Conflicting peer dependency: [email protected]
npm warn node_modules/typescript
npm warn peer typescript@">=4.8.4 <5.8.0" from @typescript-eslint/[email protected]
npm warn node_modules/@typescript-eslint/type-utils
npm warn @typescript-eslint/type-utils@"8.19.1" from @typescript-eslint/[email protected]
npm warn node_modules/@typescript-eslint/eslint-plugin
npm warn ERESOLVE overriding peer dependency
npm warn While resolving: @typescript-eslint/[email protected]
npm warn Found: [email protected]
npm warn node_modules/typescript
npm warn dev typescript@"^5.8.2" from the root project
npm warn 2 more (eslint-config-next, ts-api-utils)
npm warn
npm warn Could not resolve dependency:
npm warn peer typescript@">=4.8.4 <5.8.0" from @typescript-eslint/[email protected]
npm warn node_modules/@typescript-eslint/typescript-estree
npm warn @typescript-eslint/typescript-estree@"8.19.1" from @typescript-eslint/[email protected]
npm warn node_modules/@typescript-eslint/parser
npm warn 2 more (@typescript-eslint/type-utils, @typescript-eslint/utils)
npm warn
npm warn Conflicting peer dependency: [email protected]
npm warn node_modules/typescript
npm warn peer typescript@">=4.8.4 <5.8.0" from @typescript-eslint/[email protected]
npm warn node_modules/@typescript-eslint/typescript-estree
npm warn @typescript-eslint/typescript-estree@"8.19.1" from @typescript-eslint/[email protected]
npm warn node_modules/@typescript-eslint/parser
npm warn 2 more (@typescript-eslint/type-utils, @typescript-eslint/utils)
npm warn ERESOLVE overriding peer dependency
npm warn While resolving: @typescript-eslint/[email protected]
npm warn Found: [email protected]
npm warn node_modules/typescript
npm warn dev typescript@"^5.8.2" from the root project
npm warn 2 more (eslint-config-next, ts-api-utils)
npm warn
npm warn Could not resolve dependency:
npm warn peer typescript@">=4.8.4 <5.8.0" from @typescript-eslint/[email protected]
npm warn node_modules/@typescript-eslint/utils
npm warn @typescript-eslint/utils@"8.19.1" from @typescript-eslint/[email protected]
npm warn node_modules/@typescript-eslint/eslint-plugin
npm warn 1 more (@typescript-eslint/type-utils)
npm warn
npm warn Conflicting peer dependency: [email protected]
npm warn node_modules/typescript
npm warn peer typescript@">=4.8.4 <5.8.0" from @typescript-eslint/[email protected]
npm warn node_modules/@typescript-eslint/utils
npm warn @typescript-eslint/utils@"8.19.1" from @typescript-eslint/[email protected]
npm warn node_modules/@typescript-eslint/eslint-plugin
npm warn 1 more (@typescript-eslint/type-utils)
npm error code ERESOLVE
npm error ERESOLVE could not resolve
npm error
npm error While resolving: [email protected]
npm error Found: [email protected]
npm error node_modules/react
npm error dev react@"^19.0.0" from the root project
npm error peer react@"^18.0.0 || ^19.0.0 || ^19.0.0-0" from @clerk/[email protected]
npm error node_modules/@clerk/clerk-react
npm error @clerk/clerk-react@"^5.25.2" from @clerk/[email protected]
npm error node_modules/@clerk/nextjs
npm error dev @clerk/nextjs@"^6.12.9" from the root project
npm error 47 more (@clerk/nextjs, @clerk/shared, @floating-ui/react-dom, ...)
npm error
npm error Could not resolve dependency:
npm error peer react@"^18.2.0" from [email protected]
npm error node_modules/next-view-transitions
npm error dev next-view-transitions@"^0.3.4" from the root project
npm error
npm error Conflicting peer dependency: [email protected]
npm error node_modules/react
npm error peer react@"^18.2.0" from [email protected]
npm error node_modules/next-view-transitions
npm error dev next-view-transitions@"^0.3.4" from the root project
npm error
npm error Fix the upstream dependency conflict, or retry
npm error this command with --force or --legacy-peer-deps
npm error to accept an incorrect (and potentially broken) dependency resolution.
npm error
npm error
npm error For a full report see:
npm error /.npm/_logs/2025-03-23T22_31_59_841Z-eresolve-report.txt
npm error A complete log of this run can be found in: /.npm/_logs/2025-03-23T22_31_59_841Z-debug-0.log

✨ Finishing Touches
  • 📝 Generate Docstrings

🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between cd9a08a and c81ff33.

📒 Files selected for processing (4)
  • mdx-components.tsx (1 hunks)
  • src/app/blog/enhancing-web-experiences-with-the-view-transitions-api/page.mdx (10 hunks)
  • src/components/blog/CommentSection.tsx (1 hunks)
  • src/components/blog/TableOfContents.tsx (1 hunks)
✅ Files skipped from review due to trivial changes (2)
  • src/components/blog/TableOfContents.tsx
  • src/components/blog/CommentSection.tsx
🧰 Additional context used
🪛 LanguageTool
src/app/blog/enhancing-web-experiences-with-the-view-transitions-api/page.mdx

[typographical] ~168-~168: Consider adding a comma after ‘Fortunately’ for more clarity.
Context: ... ## View Transitions API with Next.js Fortunately there's a npm package that integrates w...

(RB_LY_COMMA)


[uncategorized] ~169-~169: You might be missing the article “the” here.
Context: ...s with Next.js directly and makes using View Transitions API very easy. Here's the s...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[style] ~169-~169: As an alternative to the over-used intensifier ‘very’, consider replacing this phrase.
Context: ...ly and makes using View Transitions API very easy. Here's the steps to getting it integra...

(EN_WEAK_ADJECTIVE)


[grammar] ~169-~169: Did you mean “Here are the steps”?
Context: ...s using View Transitions API very easy. Here's the steps to getting it integrated into your exis...

(THERE_S_MANY)


[uncategorized] ~205-~205: You might be missing the article “a” here.
Context: ...een the pages you should be able to see smooth transition. You can take look at there ...

(AI_EN_LECTOR_MISSING_DETERMINER_A)

⏰ Context from checks skipped due to timeout of 90000ms (1)
  • GitHub Check: build (20.x)
🔇 Additional comments (2)
mdx-components.tsx (1)

36-37: LGTM: Enhanced heading typography.

The updated font weights for headings create better visual hierarchy - changing from semi-bold to bold for general headings and from bold to extra-bold for h1. This enhancement improves readability and visual differentiation between heading levels.

src/app/blog/enhancing-web-experiences-with-the-view-transitions-api/page.mdx (1)

153-157: LGTM: Improved iframe presentation.

The increased iframe height (300→500) provides better visibility for the embedded content. Setting the default tab to "result" improves UX by showing the output immediately rather than requiring users to switch tabs.

@@ -202,13 +202,13 @@ const MyComponent = () => {
}
```

And thats it, now as you navigate between the pages you should be able to see smooth transition. You can take look at there example [here](https://nirnejak.com/)
And that's it, now as you navigate between the pages you should be able to see smooth transition. You can take look at there example [here](https://nirnejak.com/)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Correct grammar mistake.

There's a missing article and a pronoun mistake in this sentence.

-And that's it, now as you navigate between the pages you should be able to see smooth transition. You can take look at there example [here](https://nirnejak.com/)
+And that's it, now as you navigate between the pages you should be able to see smooth transition. You can take a look at their example [here](https://nirnejak.com/)
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
And that's it, now as you navigate between the pages you should be able to see smooth transition. You can take look at there example [here](https://nirnejak.com/)
And that's it, now as you navigate between the pages you should be able to see smooth transition. You can take a look at their example [here](https://nirnejak.com/)
🧰 Tools
🪛 LanguageTool

[uncategorized] ~205-~205: You might be missing the article “a” here.
Context: ...een the pages you should be able to see smooth transition. You can take look at there ...

(AI_EN_LECTOR_MISSING_DETERMINER_A)


Fortunately theres a npm package that integrates with Next.js directly and makes using View Transitions API very easy. Heres the steps to getting it integrated into your existing Next.js App.
Fortunately there's a npm package that integrates with Next.js directly and makes using View Transitions API very easy. Here's the steps to getting it integrated into your existing Next.js App.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Fix grammar issues in the introduction paragraph.

There are several grammatical issues in this sentence that should be corrected.

-Fortunately there's a npm package that integrates with Next.js directly and makes using View Transitions API very easy. Here's the steps to getting it integrated into your existing Next.js App.
+Fortunately, there's an npm package that integrates with Next.js directly and makes using the View Transitions API easy. Here are the steps to getting it integrated into your existing Next.js App.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Fortunately there's a npm package that integrates with Next.js directly and makes using View Transitions API very easy. Here's the steps to getting it integrated into your existing Next.js App.
Fortunately, there's an npm package that integrates with Next.js directly and makes using the View Transitions API easy. Here are the steps to getting it integrated into your existing Next.js App.
🧰 Tools
🪛 LanguageTool

[uncategorized] ~169-~169: You might be missing the article “the” here.
Context: ...s with Next.js directly and makes using View Transitions API very easy. Here's the s...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[style] ~169-~169: As an alternative to the over-used intensifier ‘very’, consider replacing this phrase.
Context: ...ly and makes using View Transitions API very easy. Here's the steps to getting it integra...

(EN_WEAK_ADJECTIVE)


[grammar] ~169-~169: Did you mean “Here are the steps”?
Context: ...s using View Transitions API very easy. Here's the steps to getting it integrated into your exis...

(THERE_S_MANY)

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
src/components/Hero.tsx (1)

12-12: CSS optimization: Redundant size-full class removed.

The removal of the size-full class is appropriate since the absolute positioning combined with inset-0 already achieves the same effect - stretching the element to fill its container. This change helps reduce redundancy in the styling.

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 77fa246 and 0fa4c4c.

📒 Files selected for processing (2)
  • src/components/Hero.tsx (1 hunks)
  • src/components/blog/BlogChatInterface.tsx (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • src/components/blog/BlogChatInterface.tsx

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (2)
src/app/sitemap.ts (2)

15-22: Consider adding error handling for database operations.

The database query looks well-implemented with good fallback handling for the lastModified field, but there's no error handling if the database query fails.

-  // Fetch all tools directly from the database
-  const tools = await prisma.tool.findMany()
-  const toolPages = tools.map((tool) => ({
+  // Fetch all tools directly from the database
+  let toolPages = []
+  try {
+    const tools = await prisma.tool.findMany()
+    toolPages = tools.map((tool) => ({
+      url: `${baseUrl}/tools/${tool.name}/`,
+      lastModified: tool.updatedAt || tool.lastUpdated || new Date(),
+      changeFrequency: "weekly" as const,
+      priority: 0.8,
+    }))
+  } catch (error) {
+    console.error("Failed to fetch tools for sitemap:", error)
+  }

24-55: Consider reusing the date for static routes.

Creating new Date() for each static route means the lastModified date will be different each time the sitemap is generated. Consider using a single date instance for static routes if they're typically updated together.

+  const currentDate = new Date()
   const staticRoutes = [
     {
       url: baseUrl,
-      lastModified: new Date(),
+      lastModified: currentDate,
       changeFrequency: "daily" as const,
       priority: 1,
     },
     {
       url: `${baseUrl}/tools/`,
-      lastModified: new Date(),
+      lastModified: currentDate,
       changeFrequency: "weekly" as const,
       priority: 0.8,
     },
     // ... remaining routes with the same change
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c26f01a and fe55aa1.

📒 Files selected for processing (2)
  • src/app/sitemap.ts (1 hunks)
  • src/lib/metadata.ts (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • src/lib/metadata.ts
🔇 Additional comments (4)
src/app/sitemap.ts (4)

1-6: Import structure looks good.

The imports are well-organized, importing the necessary dependencies from Next.js, the blog data, base URL, and Prisma client for database access.


7-13: Blog sitemap entries implementation is solid.

The function correctly maps blog posts to sitemap entries with appropriate URL formatting, lastModified dates from publish dates, and reasonable priority values. The use of as const for change frequency is a good TypeScript practice to ensure type safety.


57-58: Efficient return statement combining all routes.

The spread operator efficiently combines all route arrays into a single sitemap array. This is a clean and concise approach.


19-19:

✅ Verification successful

Verify the fallback logic for lastModified.

The fallback chain is a good approach, but ensure that both updatedAt and lastUpdated fields exist in your database schema. If one is deprecated, consider simplifying.


🏁 Script executed:

#!/bin/bash
# Check for the definition of the Tool model in the Prisma schema
cat prisma/schema.prisma | grep -A 20 "model Tool"

Length of output: 517


Verified: The fallback logic for lastModified is valid.

After checking the Prisma schema for the Tool model, both updatedAt and lastUpdated are present and correctly defined. The fallback chain (tool.updatedAt || tool.lastUpdated || new Date()) is therefore appropriate, and no changes are required.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (6)
src/app/blog/supabase-vs-clerk/page.mdx (4)

66-66: Consider rephrasing for better readability

The phrase "I talk about" is somewhat informal. Consider using more professional alternatives.

-This is the fourth post in a series of **awesome developer tools** I intend to write about. In the last 3 posts I talk about Neon, Supabase, Postgres and MongoDB it's worth revisiting:
+This is the fourth post in a series of **awesome developer tools** I intend to write about. In the last 3 posts I discussed Neon, Supabase, Postgres and MongoDB that are worth revisiting:
🧰 Tools
🪛 LanguageTool

[style] ~66-~66: The phrase ‘talk about’ can be informal. To elevate your writing, consider using a more professional alternative.
Context: ...d to write about. In the last 3 posts I talk about Neon, Supabase, Postgres and MongoDB it...

(TALK_ABOUT_DISCUSS)


72-72: Fix plural form for better grammar

When referring to something as "one of the most critical", the noun should be plural.

-Today I want to talk about `auth` which is one of the most critical component of any app. Whether you're building a simple web app or a full-scale app, ensuring that users can securely log in and manage their accounts is essential.
+Today I want to talk about `auth` which is one of the most critical components of any app. Whether you're building a simple web app or a full-scale app, ensuring that users can securely log in and manage their accounts is essential.
🧰 Tools
🪛 LanguageTool

[uncategorized] ~72-~72: Did you mean “components”? When referring to something being ‘one of the …’ the noun usually takes a plural form as it is still being referred to against a multiple.
Context: ...auth` which is one of the most critical component of any app. Whether you're building a s...

(PLURALITY_OF_CD_OF_THE_NNS)


453-453: Fix verb usage

The word "logouts" should be "logs out" as it's a verb in this context.

-In the logout function, we call the **supabase.auth.signout()** function and it logouts the user.
+In the logout function, we call the **supabase.auth.signout()** function and it logs out the user.
🧰 Tools
🪛 LanguageTool

[misspelling] ~453-~453: Did you mean the verb “logs out” instead of the noun ‘logouts’?
Context: ...pabase.auth.signout()** function and it logouts the user. Let's login with the test us...

(LOG_IN)


466-466: Fix hyphenation and punctuation

"Built-in" should be hyphenated, and "etc" should have a period after it in American English.

-> Clerk provides us with built in components like **\<SignInButton />, \<UserButton /> \<SignedIn />, \<SignedOut />** etc to help in the integration.
-> Clerk provides us with built-in components like **\<SignInButton />, \<UserButton /> \<SignedIn />, \<SignedOut />** etc. to help in the integration.
🧰 Tools
🪛 LanguageTool

[grammar] ~466-~466: A hyphen is missing in the adjective “built-in”.
Context: ...e Clerk Auth. > Clerk provides us with built in components like **<SignInButton />, <...

(BUILT_IN_HYPHEN)


[style] ~466-~466: In American English, abbreviations like “etc.” require a period.
Context: ...tton /> <SignedIn />, <SignedOut />** etc to help in the integration. We need to...

(ETC_PERIOD)

src/app/blog/coderabbit-vs-others-ai-code-review-tools/page.mdx (2)

345-345: Fix hyphenation in "sign up"

When used as a verb, "sign up" should not be hyphenated.

-Then, sign-up with your Git provider. In this case, I will sign up for GitHub.
+Then, sign up with your Git provider. In this case, I will sign up for GitHub.
🧰 Tools
🪛 LanguageTool

[grammar] ~345-~345: When ‘sign in’ is used as a verb, it does not need to be hyphenated.
Context: ...AI" width={1200} height={600} /> Then, sign-up with your Git provider. In this case, I...

(SIGN_IN)


574-574: Improve verb usage

The verb "consider" should be followed by the gerund form.

-Also, CodeAnt AI provides a list of things to consider to improve the quality of your code.
+Also, CodeAnt AI provides a list of things to consider for improving the quality of your code.
🧰 Tools
🪛 LanguageTool

[grammar] ~574-~574: The verb ‘consider’ is used with the gerund form.
Context: ...CodeAnt AI provides a list of things to consider to improve the quality of your code. <Image src={...

(ADMIT_ENJOY_VB)

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 498d308 and 14bcc91.

⛔ Files ignored due to path filters (130)
  • package-lock.json is excluded by !**/package-lock.json
  • public/images/MongoDB vs. PostgreSQL.png is excluded by !**/*.png
  • public/images/T.png is excluded by !**/*.png
  • public/images/Twilio vs Stream.png is excluded by !**/*.png
  • public/images/coderabbit-vs-others.png is excluded by !**/*.png
  • public/images/default-og-image.png is excluded by !**/*.png
  • public/images/img_13.png is excluded by !**/*.png
  • public/images/img_4.png is excluded by !**/*.png
  • public/images/img_47.png is excluded by !**/*.png
  • public/images/img_56.png is excluded by !**/*.png
  • public/images/img_65.png is excluded by !**/*.png
  • public/images/img_67.png is excluded by !**/*.png
  • public/images/img_9.png is excluded by !**/*.png
  • public/images/state-of-databases.png is excluded by !**/*.png
  • public/images/supabase-clerk.png is excluded by !**/*.png
  • public/images/twilio-vs-stream.png is excluded by !**/*.png
  • public/vercel.svg is excluded by !**/*.svg
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/cover.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_1.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_10.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_11.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_12.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_13.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_14.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_15.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_16.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_17.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_18.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_19.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_2.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_20.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_21.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_22.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_23.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_24.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_25.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_26.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_27.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_28.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_29.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_3.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_30.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_31.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_32.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_33.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_34.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_35.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_36.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_37.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_38.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_39.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_4.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_40.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_41.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_42.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_43.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_44.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_5.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_6.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_7.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_8.png is excluded by !**/*.png
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/img_9.png is excluded by !**/*.png
  • src/app/blog/mongoDB-vs-postgreSQL/cover.png is excluded by !**/*.png
  • src/app/blog/mongoDB-vs-postgreSQL/img_17.png is excluded by !**/*.png
  • src/app/blog/mongoDB-vs-postgreSQL/img_18.png is excluded by !**/*.png
  • src/app/blog/mongoDB-vs-postgreSQL/img_19.png is excluded by !**/*.png
  • src/app/blog/mongoDB-vs-postgreSQL/img_20.png is excluded by !**/*.png
  • src/app/blog/neon-vs-supabase/cover.png is excluded by !**/*.png
  • src/app/blog/neon-vs-supabase/data-supabase-vs-neon.png is excluded by !**/*.png
  • src/app/blog/neon-vs-supabase/img.png is excluded by !**/*.png
  • src/app/blog/neon-vs-supabase/img_1.png is excluded by !**/*.png
  • src/app/blog/neon-vs-supabase/img_2.png is excluded by !**/*.png
  • src/app/blog/neon-vs-supabase/img_3.png is excluded by !**/*.png
  • src/app/blog/state-of-databases-2024/cover.png is excluded by !**/*.png
  • src/app/blog/state-of-databases-2024/img_10.png is excluded by !**/*.png
  • src/app/blog/state-of-databases-2024/img_11.png is excluded by !**/*.png
  • src/app/blog/state-of-databases-2024/img_12.png is excluded by !**/*.png
  • src/app/blog/state-of-databases-2024/img_14.png is excluded by !**/*.png
  • src/app/blog/state-of-databases-2024/img_15.png is excluded by !**/*.png
  • src/app/blog/state-of-databases-2024/img_16.png is excluded by !**/*.png
  • src/app/blog/state-of-databases-2024/img_8.png is excluded by !**/*.png
  • src/app/blog/stream-vs-twilio/cover.png is excluded by !**/*.png
  • src/app/blog/stream-vs-twilio/img_66.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/cover.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_21.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_22.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_23.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_24.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_25.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_26.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_27.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_28.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_29.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_30.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_31.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_32.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_33.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_34.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_35.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_36.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_37.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_38.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_39.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_40.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_41.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_42.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_43.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_44.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_45.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_46.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_48.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_49.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_50.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_51.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_52.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_53.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_54.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_55.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_57.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_58.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_59.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_60.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_61.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_62.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_63.png is excluded by !**/*.png
  • src/app/blog/supabase-vs-clerk/img_64.png is excluded by !**/*.png
  • src/assets/testimonials/alberto.png is excluded by !**/*.png
  • src/assets/testimonials/andy.png is excluded by !**/*.png
  • src/assets/testimonials/ophir.png is excluded by !**/*.png
📒 Files selected for processing (23)
  • mdx-components.tsx (3 hunks)
  • package.json (1 hunks)
  • src/app/blog/coderabbit-vs-others-ai-code-review-tools/page.mdx (19 hunks)
  • src/app/blog/data.ts (1 hunks)
  • src/app/blog/mongoDB-vs-postgreSQL/page.mdx (5 hunks)
  • src/app/blog/neon-vs-supabase/page.mdx (5 hunks)
  • src/app/blog/state-of-databases-2024/page.mdx (8 hunks)
  • src/app/blog/stream-vs-twilio/page.mdx (2 hunks)
  • src/app/blog/supabase-vs-clerk/page.mdx (28 hunks)
  • src/app/contribute/page.tsx (2 hunks)
  • src/app/globals.css (0 hunks)
  • src/app/page.tsx (1 hunks)
  • src/components/CurrentSponsors.tsx (1 hunks)
  • src/components/EmailSubscription.tsx (1 hunks)
  • src/components/FeaturedPosts.tsx (5 hunks)
  • src/components/Footer.tsx (5 hunks)
  • src/components/Testimonial.tsx (2 hunks)
  • src/components/blog/BackToTop.tsx (1 hunks)
  • src/components/blog/BlogHeader.tsx (2 hunks)
  • src/components/blog/CodeCopyButton.tsx (1 hunks)
  • src/components/blog/CommentSection.tsx (3 hunks)
  • src/components/blog/SocialShare.tsx (2 hunks)
  • src/components/tools/toolDetails/ToolDetailsPage.tsx (3 hunks)
💤 Files with no reviewable changes (1)
  • src/app/globals.css
✅ Files skipped from review due to trivial changes (7)
  • src/components/EmailSubscription.tsx
  • src/components/blog/BackToTop.tsx
  • src/components/blog/CodeCopyButton.tsx
  • src/components/CurrentSponsors.tsx
  • src/components/tools/toolDetails/ToolDetailsPage.tsx
  • src/components/blog/SocialShare.tsx
  • src/app/blog/state-of-databases-2024/page.mdx
🚧 Files skipped from review as they are similar to previous changes (4)
  • src/app/contribute/page.tsx
  • mdx-components.tsx
  • src/components/blog/CommentSection.tsx
  • package.json
🧰 Additional context used
🧬 Code Definitions (1)
src/components/FeaturedPosts.tsx (1)
src/app/blog/data.ts (1)
  • allBlogs (10-116)
🪛 LanguageTool
src/app/blog/supabase-vs-clerk/page.mdx

[style] ~66-~66: The phrase ‘talk about’ can be informal. To elevate your writing, consider using a more professional alternative.
Context: ...d to write about. In the last 3 posts I talk about Neon, Supabase, Postgres and MongoDB it...

(TALK_ABOUT_DISCUSS)


[uncategorized] ~72-~72: Did you mean “components”? When referring to something being ‘one of the …’ the noun usually takes a plural form as it is still being referred to against a multiple.
Context: ...auth` which is one of the most critical component of any app. Whether you're building a s...

(PLURALITY_OF_CD_OF_THE_NNS)


[style] ~77-~77: This phrasing can be wordy. Consider using a more active and concise tone.
Context: ...nd .NET backend. > By the end, you'll have a clear understanding of which solution may work best for you. ...

(CLEARLY_UNDERSTAND)


[uncategorized] ~190-~190: Use a comma before ‘and’ if it connects two independent clauses (unless they are closely connected and short).
Context: ... > Great - You've created your Clerk app and now you'll see your shiny new **Dashboa...

(COMMA_COMPOUND_SENTENCE)


[grammar] ~283-~283: “React” is a proper noun and needs to be capitalized.
Context: ...ome, Login, Success, hookup the react router and create a basic app. App.js...

(A_GOOGLE)


[misspelling] ~453-~453: Did you mean the verb “logs out” instead of the noun ‘logouts’?
Context: ...pabase.auth.signout()** function and it logouts the user. Let's login with the test us...

(LOG_IN)


[misspelling] ~455-~455: Did you mean the verb “log in” instead of the noun ‘login’?
Context: ...unction and it logouts the user. Let's login with the test user (`thewritingwallah@g...

(LOG_IN)


[grammar] ~466-~466: A hyphen is missing in the adjective “built-in”.
Context: ...e Clerk Auth. > Clerk provides us with built in components like **<SignInButton />, <...

(BUILT_IN_HYPHEN)


[style] ~466-~466: In American English, abbreviations like “etc.” require a period.
Context: ...tton /> <SignedIn />, <SignedOut />** etc to help in the integration. We need to...

(ETC_PERIOD)


[style] ~557-~557: As an alternative to the over-used intensifier ‘really’, consider replacing this phrase.
Context: ...cation with React is super smooth and really easy to set up. ## On Backend Integration -...

(EN_WEAK_ADJECTIVE)


[style] ~713-~713: Consider shortening or rephrasing this to strengthen your wording.
Context: ...er token to access the endpoint. Let's make changes to the React app success component to ca...

(MAKE_CHANGES)


[style] ~809-~809: As a shorter alternative for ‘able to’, consider using “can”.
Context: ...rontend and backend. The logged-in user is able to access the protected API. ### Clerk L...

(BE_ABLE_TO)


[uncategorized] ~934-~934: Possible missing comma found.
Context: ...et-Key" width={1200} height={600} /> > again a heads-up: this is a sensitive key...

(AI_HYDRA_LEO_MISSING_COMMA)


[uncategorized] ~946-~946: A comma may be missing after the conjunctive/linking adverb ‘Hence’.
Context: ... local home page of the Vite React app. Hence in the OnTokenValidated event, we a...

(SENT_START_CONJUNCTIVE_LINKING_ADVERB_COMMA)


[uncategorized] ~1043-~1043: Possible missing comma found.
Context: ...We see that the Callback URL is pre-populated while Client ID and **Client Secret...

(AI_HYDRA_LEO_MISSING_COMMA)


[typographical] ~1069-~1069: The conjunction “so that” does not have a comma in front.
Context: ...act app and add Github as a provider, so that it appears as a login mechanism. In th...

(SO_THAT_UNNECESSARY_COMMA)


[grammar] ~1071-~1071: Make sure that the noun ‘setup’ is correct. Did you mean the past participle “set up”?
Context: ... all the OAuth providers that have been setup. ```typescript return ( <> ...

(BE_VB_OR_NN)


[style] ~1099-~1099: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...thub-app" width={1200} height={600} /> We are redirected back to localhost:5173...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[uncategorized] ~1120-~1120: Possible missing article found.
Context: ...Hublink, and it will ask to authorize Clerk with the logged inGitHub` user id. <...

(AI_HYDRA_LEO_MISSING_THE)


[style] ~1250-~1250: The phrase ‘feel free to’ is used quite frequently. Consider using a less frequent alternative to set your writing apart from others and make it sound more professional.
Context: ...d, I'd really appreciate your feedback. Feel free to share any questions you have so I can c...

(FEEL_FREE_TO_STYLE_ME)

src/app/blog/coderabbit-vs-others-ai-code-review-tools/page.mdx

[grammar] ~345-~345: When ‘sign in’ is used as a verb, it does not need to be hyphenated.
Context: ...AI" width={1200} height={600} /> Then, sign-up with your Git provider. In this case, I...

(SIGN_IN)


[grammar] ~353-~353: The word ‘Install’ is not a noun.
Context: ... install `CodeAnt AI into and click the Install button. <Image src={Img9} alt="CodeAnt...

(A_INSTALL)


[uncategorized] ~365-~365: The noun “Sign-in” is spelled with a hyphen.
Context: ...bit.ai](http://korbit.ai) and click the Sign in button. <Image src={Img5} alt="Korbit ...

(SIGN_UP_HYPHEN)


[style] ~556-~556: To elevate your writing, try using a synonym here.
Context: ...ultiple extra checkboxes, which made it hard to understand the issue. Even though th...

(HARD_TO)


[grammar] ~574-~574: The verb ‘consider’ is used with the gerund form.
Context: ...CodeAnt AI provides a list of things to consider to improve the quality of your code. <Image src={...

(ADMIT_ENJOY_VB)


[style] ~597-~597: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...icking the Create Pull Request Button. After that, the Korbit AI bot processes the n...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)

🔇 Additional comments (35)
src/app/page.tsx (1)

22-22: Improved component architecture

The removal of props from the FeaturedPosts component indicates a good architectural change where the component now likely handles its own data filtering internally rather than receiving it as props from the parent.

src/components/Testimonial.tsx (2)

7-9: Good image import practice

Adding proper image imports improves code maintainability and allows Next.js to optimize these assets.


26-26: Consistent image reference pattern

Using the imported image objects with the .src property is the correct approach for working with static images in Next.js.

Also applies to: 32-32, 38-38

src/components/blog/BlogHeader.tsx (3)

9-9: Good icon import

Adding the CircleUserRound icon from the Lucide React library enhances the UI with minimal overhead.


50-52: Improved heading style

The inline style for line height improves text readability, especially for large headings.


55-58: Enhanced author display

Adding the user icon next to the author name provides better visual cues and improves the UI.

src/app/blog/stream-vs-twilio/page.mdx (3)

5-6: Good image management

Using explicit imports for images is a better practice than hardcoded paths.


13-13: Improved metadata image reference

Using the imported image's src property for metadata ensures consistency between the actual image and metadata.


400-400: Consistent image component usage

Using the imported image variable with the Next.js Image component follows best practices.

src/components/FeaturedPosts.tsx (4)

7-11: Good implementation of the featured posts filter!

You've added a direct filter on the imported allBlogs array to get featured posts. This approach simplifies the component by removing the need for props.


31-31: Good refactoring from url to slug

Changing from url to slug in both the prop type and the href construction creates a more consistent URL pattern. Using slugs is a common practice for blog URLs and improves SEO.

Also applies to: 40-40


76-76: Simplified component signature

Removing the props interface and making the component directly use the filtered data reduces complexity. This is appropriate since the component now has a single purpose of displaying featured posts from a known data source.


95-95: Direct data usage improves code clarity

Using the filtered featuredPosts array directly in the component simplifies the code and makes the data flow more obvious.

src/components/Footer.tsx (4)

5-5: Good addition of proper navigation component

Adding the Link from next-view-transitions ensures proper navigation behavior and transitions between pages.


129-129: Improved styling consistency

The styling changes to the WebsitePromo component and its child elements create a more consistent visual experience by standardizing the border, padding, and transition effects.

Also applies to: 138-139, 151-152


185-207: Enhanced branding with interactive logo

Replacing the static header with an interactive logo and styled text improves both branding and user experience. The SVG logo is clean and the text formatting with the blinking cursor adds a nice touch.


209-209: Improved component organization

Moving the SocialLinks component call directly after the logo link creates a more logical flow in the UI.

src/app/blog/neon-vs-supabase/page.mdx (4)

3-11: Good use of Next.js Image imports

Adding proper imports for the Image component and the image files allows for better image optimization and type safety.


18-18: Dynamic image path in metadata

Using CoverImage.src instead of a hardcoded path in the metadata ensures consistency if the image changes and centralizes image management.


311-316: Improved image rendering with Next.js Image component

Replacing the markdown image syntax with the Next.js Image component enables:

  • Automatic image optimization
  • Lazy loading for better performance
  • Proper responsiveness with specified dimensions
  • Improved accessibility with the alt text

This is a significant improvement for user experience and page performance.


331-331: Consistent image component usage throughout

Consistently using the Image component for all images in the document ensures uniform behavior and optimizations across all visual content.

Also applies to: 445-449

src/app/blog/mongoDB-vs-postgreSQL/page.mdx (4)

8-13: Good image imports approach

Importing all images at the top of the file creates a clean structure and makes it easy to see all the visual assets used in the document.


21-21: Improved metadata with dynamic image path

Using the imported CoverImage.src in metadata ensures consistency and makes it easier to update the image reference if needed.


25-25: Improved title formatting

Adding a space around the hyphen in "MongoDB vs PostgreSQL - A Technical Comparison" improves readability and follows proper typography practices.


281-281: Consistent Image component implementation

Replacing all static markdown images with the Next.js Image component throughout the document ensures consistent performance benefits and visual rendering.

Also applies to: 346-350, 381-381, 468-468

src/app/blog/data.ts (4)

1-7: Excellent use of cover image imports for consistency!

The addition of cover image imports for each blog post establishes a maintainable pattern that makes it easier to reference images throughout the site. This approach is more maintainable than using hardcoded paths.


10-25: Well-structured blog post data enhancement

Adding metadata like excerpt, image, category flags for new and featured posts significantly improves the blog data structure. This provides richer context for UI components and enables better filtering and display options.


81-82: Good title formatting correction

The addition of a space after the dash in "MongoDB vs PostgreSQL - A Technical Comparison" improves readability and maintains consistent formatting across blog titles.


44-51: Consistent property structure for all blog entries

All blog entries now follow a consistent data structure with the same properties, which improves maintainability and makes it easier to render blog posts consistently in the UI.

Also applies to: 60-64, 73-77, 86-90, 95-101, 107-115

src/app/blog/supabase-vs-clerk/page.mdx (3)

5-50: Good refactoring of image imports

Converting from hardcoded image paths to imports improves maintainability and allows TypeScript to verify image paths at build time. This pattern is more consistent with modern React development practices.


57-57: Improved metadata handling with dynamic image source

Using CoverImage.src instead of a hardcoded path in metadata is a good practice. It centralizes the image reference and ensures consistency between the metadata and the actual image used in the content.


1033-1250: Well-structured comparison and conclusion

The comparison between Supabase and Clerk is well-organized and provides clear differentiators to help readers make an informed decision. The summary tables highlight key features and differences effectively.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~1043-~1043: Possible missing comma found.
Context: ...We see that the Callback URL is pre-populated while Client ID and **Client Secret...

(AI_HYDRA_LEO_MISSING_COMMA)


[typographical] ~1069-~1069: The conjunction “so that” does not have a comma in front.
Context: ...act app and add Github as a provider, so that it appears as a login mechanism. In th...

(SO_THAT_UNNECESSARY_COMMA)


[grammar] ~1071-~1071: Make sure that the noun ‘setup’ is correct. Did you mean the past participle “set up”?
Context: ... all the OAuth providers that have been setup. ```typescript return ( <> ...

(BE_VB_OR_NN)


[style] ~1099-~1099: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...thub-app" width={1200} height={600} /> We are redirected back to localhost:5173...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[uncategorized] ~1120-~1120: Possible missing article found.
Context: ...Hublink, and it will ask to authorize Clerk with the logged inGitHub` user id. <...

(AI_HYDRA_LEO_MISSING_THE)


[misspelling] ~1171-~1171: This word is normally spelled as one.
Context: .../auth/auth-mfa) #### Clerk > Built-in multi-factor authentication (MFA) with multiple veri...

(EN_COMPOUNDS_MULTI_FACTOR)


[style] ~1187-~1187: To form a complete sentence, be sure to include a subject.
Context: ... Frontend Integration #### Supabase > Can be integrated with custom UI via SDKs (...

(MISSING_IT_THERE)


[uncategorized] ~1211-~1211: Possible missing comma found.
Context: ... higher usage. #### Clerk > Free tier available with pricing based on active users; adv...

(AI_HYDRA_LEO_MISSING_COMMA)


[uncategorized] ~1231-~1231: Possible missing comma found.
Context: ...k > Highly user-friendly and developer-friendly with minimal configuration needed for b...

(AI_HYDRA_LEO_MISSING_COMMA)


[style] ~1250-~1250: The phrase ‘feel free to’ is used quite frequently. Consider using a less frequent alternative to set your writing apart from others and make it sound more professional.
Context: ...d, I'd really appreciate your feedback. Feel free to share any questions you have so I can c...

(FEEL_FREE_TO_STYLE_ME)

src/app/blog/coderabbit-vs-others-ai-code-review-tools/page.mdx (3)

6-52: Good use of image imports for maintainability

Converting from hardcoded image paths to imports improves code maintainability and allows for better type checking. This pattern makes it easier to manage images and ensures paths are valid at build time.


58-58: Consistent metadata pattern

Using CoverImage.src in the metadata instead of a hardcoded path ensures consistency with other blog posts and improves maintainability.


98-98: Images now use imported variables instead of hardcoded paths

All <Image> components now use imported image variables instead of hardcoded paths. This improves maintainability and ensures consistency across the codebase.

Also applies to: 129-129, 145-145, 156-156, 167-167, 216-216, 343-343, 347-347, 367-367, 371-371, 375-375, 472-472, 476-476, 480-480, 484-484, 487-487, 492-492, 495-495, 499-499, 503-503, 512-512, 520-520, 523-523, 531-531, 542-542, 566-566, 572-572, 596-596, 624-624, 634-634, 642-642, 650-650, 660-660, 664-664, 693-693, 756-756, 766-766, 774-774, 782-782

@tyaga001 tyaga001 merged commit abaa428 into main Mar 24, 2025
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants